// 更改原数组方法
const methodsToPatch = [
  "push",
  "pop",
  "shift",
  "unshift",
  "splice",
  "reverse",
  "sort",
];
// 保存数组原型上所有方法 这里是引用
const arrayProto = Array.prototype;
// 创建一个新的对象
const arrayMethods = Object.create(arrayProto);

methodsToPatch.map((method) => {
  // 重写array上可改变原数组的的方法  // 保存参数
  arrayMethods[method] = function (...args) {
    const result = arrayProto[method].apply(this, args);
    let ob = this.__ob__;
    let inserted;
    switch (method) {
      // push unshift inserted 可能添加一个对象
      case "push":
      case "unshift":
        inserted = args;
        break;
      case "splice":
        inserted = args.slice(2);
        break;
      default:
        break;
    }
    inserted && ob.observeArray(inserted);
    return result;
  };
});

export default arrayMethods;
